////类型转换构造函数和类型转换操作符函数
//#include <iostream>
//
//using namespace std;
//class Dog;//短式声明/前置声明
//class Cat {
//public:
//    Cat(const char* name) : m_name(name) {
//        //[string m_name(name);]
//    }
//
//    void talk() {
//        cout << m_name << ":喵喵~~~~" << endl;
//    }
//    operator Dog(/*const Cat* this*/)const;//声明
//
//private:
//    string m_name;
//
//    friend class Dog;//友元声明
//
//};
//
//class Dog {
//public:
//    Dog(const char* name) : m_name(name) {
//        //[string m_name=name;]
//    }
//
//  /*  Dog(const Cat& that) : m_name(that.m_name) {//类型转换构造（定制了Cat-->Dog的转换）
//        //[string m_name = that.m_name
//        cout << "Dog类的类型转换构造函数被调用" << endl;
//    }
//    */
//    void talk() {
//        cout << m_name << ": 汪汪~~~" << endl;
//    }
//
//private:
//    string m_name;
//};
//Cat::operator Dog(/*const Cat* this*/)const {//定义
//    cout << "Cat类的类型转换操作符函数被调用" << endl;
//    return Dog(this->m_name.c_str());
//}
//
//int main(void) {
//    Cat smallWhite("小白");
//
//    Dog bigYellow(smallWhite);//Dog bigYello = smallwhite.operator Dog() -->触发类型转换操作符函数--》触发Cat类型转换操作符
//
//    return 0;
//}